package services

// LoginPasswordRequest 接收登录参数结构体
type LoginPasswordRequest struct {
	// 登录用户名
	UserName string `json:"username"`
	// 登录密码
	Password string `json:"password"`
}

// LoginPasswordReply 登录成功后的token结构体
type LoginPasswordReply struct {
	Token        string `json:"token"`
	RefreshToken string `json:"refreshToken"`
}

// GetUserListRequest 获取管理员列表参数结构体
type GetUserListRequest struct {
	*QueryRequest
}

// QueryRequest 关键词和分页信息结构体
type QueryRequest struct {
	PageIndex int    `json:"pageIndex" form:"pageIndex"`
	PageSize  int    `json:"pageSize" form:"pageSize"`
	Keyword   string `json:"keyword" form:"keyword"`
}

// GetUserListReply 返回管理员信息的结构体
type GetUserListReply struct {
	ID        int    `json:"id"`
	Username  string `json:"username"`
	Avatar    string `json:"avatar"`
	Phone     string `json:"phone"`
	CreatedAt string `json:"createdAt"`
	UpdatedAt string `json:"updatedAt"`
}

// AddUserRequest 接收添加管理员表单数据的结构体
type AddUserRequest struct {
	Username string `json:"username"`
	Password string `json:"password"`
	Phone    string `json:"phone"`
	Email    string `json:"email"`
	Remarks  string `json:"remarks"`
	RoleId   uint   `json:"roleId"`
	Avatar   string `json:"avatar"`
	Sex      string `json:"sex"`
}

// GetUserDetailReply 获取管理员信息结构体
type GetUserDetailReply struct {
	ID uint `json:"id"`
	AddUserRequest
}

// UpdateUserRequest 更新管理员信息参数结构体
type UpdateUserRequest struct {
	ID uint `json:"id"`
	AddUserRequest
}

// GetRoleListRequest 获取角色列表参数结构体
type GetRoleListRequest struct {
	*QueryRequest
}

// GetRoleListReply 返回角色信息的结构体
type GetRoleListReply struct {
	ID        int    `json:"id"`
	Name      string `json:"name"`
	IsAdmin   int8   `json:"isAdmin"`
	Sort      int64  `json:"sort"`
	Remarks   string `json:"remarks"`
	CreatedAt string `json:"createdAt"`
	UpdatedAt string `json:"updatedAt"`
}

// AddRoleRequest 接收添加角色表单数据的结构体
type AddRoleRequest struct {
	Name    string `json:"name"`
	Sort    int64  `json:"sort"`
	IsAdmin int8   `json:"isAdmin"`
	Remarks string `json:"remarks"`
	// 被授权的菜单ID
	MenuId []uint `json:"menuId"`
}

// GetRoleDetailReply 获取角色信息结构体
type GetRoleDetailReply struct {
	ID uint `json:"id"`
	AddRoleRequest
}

// UpdateRoleRequest 更新角色信息参数结构体
type UpdateRoleRequest struct {
	ID uint `json:"id"`
	AddRoleRequest
}

// MenuReply 菜单列表返回结构体
type MenuReply struct {
	ID            uint         `json:"id"`
	ParentId      uint         `json:"parent_id"`
	Name          string       `json:"name"`
	WebIcon       string       `json:"web_icon"`
	Sort          int          `json:"sort"`
	Path          string       `json:"path"`
	Level         int          `json:"level"`
	ComponentName string       `json:"component_name"`
	SubMenus      []*MenuReply `json:"sub_menus"`
}

// AllMenu 所有菜单数据结构体
type AllMenu struct {
	ID            uint   `json:"id"`
	ParentId      uint   `json:"parent_id"`
	Name          string `json:"name"`
	WebIcon       string `json:"web_icon"`
	Sort          int    `json:"sort"`
	Path          string `json:"path"`
	Level         int    `json:"level"`
	ComponentName string `json:"component_name"`
}

// 新增菜单结构体
type AddMenuRequest struct {
	// 父级菜单唯一标识，不填默认为顶级菜单
	ParentId uint `json:"parent_id"`
	// 菜单名称
	Name string `json:"name"`
	// 菜单排序
	Sort int `json:"sort"`
	// 菜单图标
	WebIcon string `json:"web_icon"`
	// 路径
	Path string `json:"path"`
	// 菜单等级 {0：目录，1：菜单，2：按钮 }
	Level int `json:"level"`
	// 组件路径
	ComponentName string `json:"component_name"`
}

// GetMenuDetailReply 获取菜单信息结构体
type GetMenuDetailReply struct {
	ID uint `json:"id"`
	AddMenuRequest
}

// UpdateMenuRequest 更新信息参数结构体
type UpdateMenuRequest struct {
	ID uint `json:"id"`
	AddMenuRequest
}

// AllRoleListReply 返回角色数据的结构体
type AllRoleListReply struct {
	ID   uint   `json:"id"`
	Name string `json:"name"`
}

// UpdatePwdRequest 更新个人密码结构体
type UpdatePwdRequest struct {
	UsedPass string `json:"usedPass"`
	NewPass  string `json:"newPass"`
}

// IpInfo IP归属地结构体
type IpInfo struct {
	// 国家
	Country string `json:"country"`
	// 区域
	Region string `json:"region"`
	// 省份
	Province string `json:"province"`
	// 城市
	City string `json:"city"`
	// 运营商
	Isp string `json:"isp"`
}

// GetLogListReply 返回日志结构体
type GetLogListReply struct {
	ID          uint   `json:"id"`
	Browser     string `json:"browser"`
	ClassMethod string `json:"classMethod"`
	HttpMethod  string `json:"httpMethod"`
	RemoteAddr  string `json:"remoteAddr"`
	StatusCode  int    `json:"statusCode"`
	UseTime     string `json:"useTime"`
	IpInfo
}

// GetLogListRequest 获取日志类别参数结构体
type GetLogListRequest struct {
	*QueryRequest
}
